/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mundo;

import java.io.Serializable;

/**
 *
 * @author cesarfgt
 */
public class Tramo implements Serializable{
    public static final int DE_A_HASTA_B = 0;
    public static final int DE_B_HASTA_A = 1;
    public static final int BIDIRECCIONAL = 2;
    
    
    private Cruce CruceA;
    private Cruce CruceB;
    private int Direccion;
    private Punto InfIz;
    private Punto SupDer;

    public Tramo(Cruce CruceA, Cruce CruceB, int direccion) {
        this.Direccion = direccion;
        this.CruceA = CruceA;
        this.CruceA.addTramo(this);
        this.CruceB = CruceB;
        this.CruceB.addTramo(this);
        if(this.CruceA.getInfIz().getY() == this.CruceB.getInfIz().getY()){   
            //  Es un tramo horizontal
            if(this.CruceA.getInfIz().getX()<this.CruceB.getInfIz().getX()){
                //  A esta a la iz de B
                this.InfIz = new Punto(this.CruceA.getSupDer().getX()+1,this.CruceA.getInfIz().getY());
                this.SupDer = new Punto(this.CruceB.getInfIz().getX()-1, this.CruceB.getSupDer().getY());
            }else{
                this.InfIz = new Punto(this.CruceB.getSupDer().getX()+1,this.CruceB.getInfIz().getY());
                this.SupDer = new Punto(this.CruceA.getInfIz().getX()-1, this.CruceA.getSupDer().getY());
            }
        }else{
            //  Es un tramo vertical
            if(this.CruceA.getInfIz().getY()<this.CruceB.getInfIz().getY()){
                //  A esta abajo de B
                this.InfIz = new Punto(this.CruceA.getInfIz().getX(),this.CruceA.getSupDer().getY()+1);
                this.SupDer = new Punto(this.CruceB.getSupDer().getX(), this.CruceB.getInfIz().getY()-1);
            }else{
                this.InfIz = new Punto(this.CruceB.getInfIz().getX(),this.CruceB.getSupDer().getY()+1);
                this.SupDer = new Punto(this.CruceA.getSupDer().getX(), this.CruceA.getInfIz().getY()-1);
            }
        }
    }

    /**
     * @return the CruceA
     */
    public Cruce getCruceA() {
        return CruceA;
    }

    /**
     * @return the CruceB
     */
    public Cruce getCruceB() {
        return CruceB;
    }

    /**
     * @return the Direccion
     */
    public int getDireccion() {
        return Direccion;
    }

    /**
     * @return the InfIz
     */
    public Punto getInfIz() {
        return InfIz;
    }

    /**
     * @return the SupDer
     */
    public Punto getSupDer() {
        return SupDer;
    }
    
    
}
